Recent advances in computer performance have enabled graphic systems to provide more realistic graphical images using personal computers, home video game computers, handheld devices, and the like. In such graphic systems, a number of procedures are executed to “render” or draw graphic primitives to the screen of the system. A “graphic primitive” is a basic component of a graphic picture, such as a point, line, polygon, or the like. Rendered images are formed with combinations of these graphic primitives. Many procedures may be utilized to perform 3-D graphics rendering.
Specialized graphics processing units (e.g., GPUs, etc.) have been developed to optimize the computations required in executing the graphics rendering procedures. The GPUs are configured for high-speed operation and typically incorporate one or more rendering pipelines. Each pipeline includes a number of hardware-based functional units that are optimized for high-speed execution of graphics instructions/data, where the instructions/data are fed into the front end of the pipeline and the computed results emerge at the back end of the pipeline. The hardware-based functional units, cache memories, firmware, and the like, of the GPU are optimized to operate on the low-level graphics primitives (e.g., comprising “points”, “lines”, “triangles”, etc.) and produce real-time rendered 3-D images.
The real-time rendered 3-D images are generated using raster display technology. Raster display technology is widely used in computer graphics systems, and generally refers to the mechanism by which the grid of multiple pixels comprising an image are influenced by the graphics primitives. For each primitive, a typical rasterization system determines whether or not to “render,” or write a given pixel into a frame buffer or pixel map, as per the contribution of the primitive. This, in turn, determines how to write the data to the display buffer representing each pixel.
Once the primitives are rasterized into their constituent pixels, these pixels are then processed in pipeline stages subsequent to the rasterization stage where the rendering operations are performed. Generally, these rendering operations assign a color to each of the pixels of a display in accordance with the degree of coverage of the primitives comprising a scene. The per pixel color is also determined in accordance with texture map information that is assigned to the primitives, lighting information, and the like.
FIG. 1 shows an exemplary implementation of graphics processing unit (GPU) 100. The process performed by the GPU generally includes setting up a polygon model (e.g., a plurality of primitives) of objects, applying linear transformation to each primitive, culling back facing primitives, clipping the primitives against a view volume, rasterizing the primitives to a pixel coordinate set, shading/lighting the individual pixels using interpolated or incremental shading techniques, and the like. Accordingly, the GPU 100 hardware includes a setup engine 110, a raster pipeline 120, a shading pipeline 130, a data write unit 140, and one or more other units.
The raster pipeline 120 typically includes a rasterizer 122, an edge evaluator 124 and one or more other circuits. The edge evaluator 124 computes the edge equation, Ax+By+C>0, for all samples, x and y, and all edges of each primitive. The primitive may include any number of edges. In an exemplary implementation the primitives may have four edges. Therefore, the exemplary edge evaluator 124 includes four edge evaluation circuits 210-240 arranged in parallel, as illustrated in FIG. 2. The edge evaluation circuits 210-240 each evaluate a given edge by computing the edge equation for all samples of an evaluation tile. For a four edge primitive evaluated for a two-by-two tile, the conventional edge evaluator 124 evaluates 16 samples per clock, which amounts to a significant area.